5
查找 React 中文文档请往 https://doc.react-china.org/

简聊代码用了 React 存在, 存在加载缓慢的问题. 一些表单页面也会受到影响
于是开始尝试做服务端渲染, 方便在打开时能更快渲染页面
JavaScript 代码以 defer 模式等待页面渲染完成, 然后开始加载

脚手架和打包相关的代码我做了整理托管在 Teambition GitHub 上
https://github.com/teambition...
另外一些注意点在下边做一些笔记

服务端渲染

  • checksum 问题

React 在服务端渲染之后, 会在根节点生成一个 checksum 用于校验
同时 React 在浏览器端也会进行一次判断, 看 HTML 内容和客户端渲染是否一致
一般都用 React 不会出问题, 但是比如空白符, 或者内容不一致, 就会给出提示

  • script defer 执行

为了 JavaScript 延迟加载, 可以用 defer 属性指明, 或者直接把标签放在 <body> 后边
因为我们渲染的 HTML 是直接把 <body> 替换的, 所以用 defer 完成了功能

  • 上线之后 CSS 加载问题

实际使用虽然 Webpack 能够打包 CSS, 但是页面加载时的效果不能缺少 CSS
所以 CSS 实际上还是应该跟着 HTML 的 <header> 一起加载的
这个实际上会影响打包的复杂度, 在我的例子当中, 所以使用了一个 CSS 文件

  • 初始化数据

JavaScript 的初始化数据使用 HTML 形式的 <script> 方式写入变量, 客户端运行过程读取

JSX

初始 HTML 内容, 也就是 <body> 外面的部分, 不属于 React Component
但也可以用 React 的方式写, 不过要注意 <!DOCTYPE HTML> 在 React 中不存在

  • script 标签关闭方式

JSX 语法类似 XML, 标签都是需要关闭的

  • body 周围空白符验证

生成的 HTML 不要有随便的空格或者换行, 否则会出现警告
即便是挂载的 React 组件外面有空格, 也会出现警告

  • stir-template

https://github.com/mvc-works/...
stir 是个小模块, 我用来生成 HTML, 语法类似 React, 但仅仅用于生成字符串
这种写法在 CoffeeScript 当中写起来会比较清晰, 对于 JavaScript 用户开发不是很必要
因为个人原因, 部分 HTML 代码会使用 CirruScript 书写, 避免一些特殊符号, 区别一下就好了

Webpack

代码热替换方案比较啰嗦, 目前的用法主要参考这篇文章
http://kevinold.com/2015/02/0...
具体涉及打包等等, 看开头我们仓库当中给出的例子

前后端共用代码

  • 特殊代码的 try

前后端共享代码对于有些库来说还是会麻烦, 我们遇到的是一些 jQuery 组件没有做好判断
原理上我们应该 fork 代码提供一个两种环境都能运行的版本
实际操作中部分代码我们临时用了 try 语句捕捉 Node 环境当中的错误
目前尝试的项目很小, 未来这个问题应该会凸显, 需要注意一下


题叶
17.3k 声望2.6k 粉丝

Calcit 语言作者